// pages/cart/index.js
import {
  request
} from "../../resquest/index.js"
import regeneratorRuntime from '../../lib/runtime/runtime';
// 导入封装的promise的微信小程序api
import {
  requestPayment,
  showToast
} from '../../utils/asyncWx.js'
Page({
  /**
   * 页面的初始数据
   */
  data: {
    address: {},
    Checkedcart: [],
    // 总价格
    totalPrice: 0,
    // 总数量
    totalNum: 0
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {},
  // 获取用户收货地址 authSetting "scope.address"
  // 调用小程序api wx.chooseAddress()
  // 获取用户对小程序授予获取地址的权限状态scope
  // 1.如果用户同意，scope为true
  // 2.如果从未调取过获取地址，scope为undefine
  // 上面两种都可以直接打开获取收货地址页面
  // 页面加载完毕，获得本地存储中的地址数据
  onShow: function () {
    // 获取地址缓存
    const address = wx.getStorageSync('address');
    // 获取购物车商品缓存
    let cart = wx.getStorageSync('cart') || [];
    // 获得过滤后的选中的商品数组
    let Checkedcart = cart.filter(v => v.checked);
    let totalPrice = 0;
    let totalNum = 0;
    // 获得总价钱和数量
    Checkedcart.forEach(v => {
      totalPrice += v.num * v.goods_price;
      totalNum += v.num;
    });
    this.setData({
      Checkedcart,
      totalPrice,
      totalNum,
      address
    })
    // wx.setStorageSync("Checkedcart", Checkedcart)
  },
  async handleOrderPay() {
    // 1.判断token
    try {
      const token = wx.getStorageSync("token")
      if (!token) {
        wx.navigateTo({
          url: '/pages/auth/index'
        })
        return;
      }
      // console.log('已经存在token');
      // 存在token,创建订单
      // 2.准备请求体参数 order_price ,consigner_addr ,goods
      const order_price = this.data.totalPrice;
      const consigner_addr = this.data.address.all;
      let goods = [];
      let Checkedcart = this.data.Checkedcart;
      Checkedcart.forEach(v => {
        goods.push({
          goods_id: v.goods_id,
          goods_number: v.num,
          goods_price: v.goods_price
        })
      });
      const orderParams = {
        order_price,
        consigner_addr,
        goods
      }
      // 3.发起请求创建订单，在这里拿到订单编号
      const res1 = await request({
        url: "/my/orders/create",
        method: "post",
        data: orderParams
      }, );
      order_number = res1.data.message.order_number;
      // console.log(res.data.message.order_number);
      //  4.发起预支付请求
      const res2 = await request({
        url: "/my/orders/req_unifiedorder",
        method: "post",
        data: {
          order_number
        }
      })
      const pay = res2.data.message.pay;
      // 5.通过pay参数请求微信支付
      const res3 = await requestPayment(pay);
      // console.log(res);
      // 6.查询订单，获得订单状态
      const res4 = await request({
        url: "/my/orders/chkOrder",
        method: "post",
        data: {
          order_number
        }
      })

      await showToast({title:"支付成功"})

      // 7.支付成功后移除购物车选中的商品
      let cart = wx.getStorageSync('cart')
      cart = cart.filter(v=>!v.checked)
      wx.setStorageSync('cart', cart);

      //8.跳转到订单页面
      wx.navigateTo({
        url: 'pages/order/index'
      })
    } catch (error) {
      await showToast({
        title: "测试版本，暂不支持此功能"
      })

    }



  }
})
// 微信支付的实现
// 1.企业账号才能使用微信支付功能
// 2.企业账号的小程序后台必须给开发者上白名单，1个appid可以同时绑定多个开发者。

// 支付功能的实现流程
// 1.先判断缓存中有没有token
// 2.没有跳转到授权页面，获取token
// 3.有token 。。。